/*
* This file is a part of the open-eBackup project.
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
* If a copy of the MPL was not distributed with this file, You can obtain one at
* http://mozilla.org/MPL/2.0/.
*
* Copyright (c) [2024] Huawei Technologies Co.,Ltd.
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
*/
#ifndef DME_NAS_HOMO_RESTOREJOB_H
#define DME_NAS_HOMO_RESTOREJOB_H

#include "ReplicationCommonService.h"

class ReplicationRestoreJob : public ReplicationCommonService {
public:
    ReplicationRestoreJob();
    ~ReplicationRestoreJob() {};
    int PostJobInner() override;
    int CheckBackupJobType();
    int AllowBackupInLocalNode();
    bool UpdateBasicDeviceInfo(Module::ControlDeviceInfo &basicDeviceInfo) override;
    bool UpdateProductDeviceInfo(Module::ControlDeviceInfo &productDeviceInfo) override;
    bool InitDeviceInfo() override;
    bool InitializeTask() override;
    bool PreStartTask() override;
    bool CheckAndCreatePair() override;
    void CleanTask(AppProtect::JobResult::type status) override;
private:
    std::shared_ptr<AppProtect::RestoreJob> m_restorePara = nullptr;
    bool MonitorSnapshotRevert(int64_t &errorCode, time_t revertStartTime);
    bool GetJobInfoBody();
    void SetSecondaryResourceProtect(const std::vector<std::string> pairIdList, bool isActive);
    bool DeletePairWhenRestore(const RestoreLocation &restoreLocation);
    bool ConfirmRestoreLocation(RestoreLocation &restoreLocation);
    int callCheckCertThumbPrint(const AppProtect::ApplicationEnvironment& targetEnv);
    bool RevertSnapShotInStorage();
    bool SplitReplicationPairForRevertSnapshot();
};
#endif // DME_NAS_HOMO_RESTOREJOB_H
